import belleza.relativa.security.Role
import belleza.relativa.security.User
import belleza.relativa.security.UserRole
import belleza.relativa.Persona
import belleza.relativa.Foto
import groovy.json.JsonSlurper

class BootStrap {

    def redNeuronalOriginalService

    def init = { servletContext ->

        def rol = new Role(authority: 'ROLE_USER').save(flush: true, failOnError: true)

        (1..75).each {
            String num = (it).toString()
            def cal = Calendar.getInstance()
            Random ran = new Random()
            def anio = ran.nextInt(20)+15
            cal.add(Calendar.YEAR,-anio)
            def sexo = it > 53 ? "M" : "F"
            def sexoBusca = it > 53 ? "F" : "M"
            def usuario = new User(username: 'usuario' + num, enabled: true, password: 'usuario' + num)

            def persona = new Persona(nombre: "nombre" + num, apellido: "apellido" + num, usuario: usuario, email: "persona" + num + "@relativa.com", pais: "Argentina", fechaNacimiento: cal.time, sexo: sexo, biografia: "Hola", sexoBuscado: sexoBusca, cantVotos: 0)
            persona.save(flush: true, failOnError: true)

            UserRole.create(usuario, rol, true)

            def foto = new Foto()
            foto.foto = new File('web-app/images/usuarios/imagen' + num + '.jpg').bytes
            foto.fotoType = 'image/png'
            foto.descripcion = "Foto principal"
            persona.setFotoPrincipal(foto)
            persona.save(flush: true, failOnError: true)
            def genero = it > 53 ? 0 : 1
            def interesadoEn = it > 53 ? 1 : 0
            if ((it == 55) || (it == 56)) interesadoEn = 2;
            redNeuronalOriginalService.createPersona(persona.id,genero,interesadoEn,foto)


        }

        //Entreno la red neuronal con el usuario 54
        File parametrosEntrenamiento = new File('web-app/WEB-INF/rubias-morochas.json')
        new JsonSlurper().parseText(parametrosEntrenamiento.getText()).each {
            redNeuronalOriginalService.entrenarRed(54,it.key,it.value)
        }

        //Entreno la red neuronal con el usuario 55
        parametrosEntrenamiento = new File('web-app/WEB-INF/puntajes_nuevos1.json')
        new JsonSlurper().parseText(parametrosEntrenamiento.getText()).each {
            redNeuronalOriginalService.entrenarRed(55,it.key,it.value)
        }


        /*def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
                def userRole = new Role(authority: 'ROLE_USER').save(flush: true)

        }
                def adminUser = new User(username: 'admin', enabled: true, password: 'admin')
                def testUser = new User(username: 'invitado', enabled: true, password: 'invitado')

                def adminPerson = new Persona(nombre: "admin",apellido: "admin",usuario: adminUser,email: "admin@admin.com",pais: "Argentina",fechaNacimiento: new Date(),sexo: "M",biografia: "Hola", sexoBuscado: "F", reputacion: 0, cantVotos: 0);
                def testPerson = new Persona(nombre: "invitado",apellido: "invitado",usuario: testUser,email: "admin@admin.com",pais: "Argentina",fechaNacimiento: new Date(),sexo: "M",biografia: "Hola", sexoBuscado: "F", reputacion: 0, cantVotos: 0);

                //Hay que hacer que cargue de un archivo la foto
        //        adminPerson.addToFotos(new Foto(descripcion: "Foto hardcodeada", url: "hombre.jpg"))
        //        testPerson.addToFotos(new Foto(descripcion: "Foto hardcodeada", url: "hombre.jpg"))

                adminPerson.save(flush: true);
                testPerson.save(flush: true);

                UserRole.create adminUser, adminRole, true
                UserRole.create testUser, userRole, true
        */
    }
    def destroy = {
    }
}
